Some storage systems comprise a host that runs a File System (FS), and a storage device in which the host stores data. For example, Mylavarapu et al. describe a FS-aware Flash Translation Layer (FTL), in “FSAF: File System Aware Flash Translation Layer for NAND Flash Memories,” Design, Automation & Test in Europe Conference & Exhibition, April, 2009, pages 399-404, which is incorporated herein by reference. FSAF monitors write requests to FAT32 table to interpret any deleted data dynamically, subsequently optimizing garbage collection (GC) and wear leveling (WL) algorithms accordingly. Also, depending upon the size of dead content and the Flash utilization, proactive dead data reclamation is carried out.
As another example, Rajimwale et al. describe a division of labor between file systems and storage in “Block Management in Solid-State Devices,” Proceedings of the USENIX Annual Technical Conference (USENIX'09), June, 2009, which is incorporated herein by reference. The authors assert that on a hard disk drive (HDD), nearby logical block numbers (LBNs) translate well to physical proximity. However, this technique fails on an SSD. This further motivates the conclusion that the file system accesses should be in terms of objects (or parts of objects) and the SSD should handle the low-level sector-specific scheduling.
As yet another example, in “Beyond Block I/O: Rethinking Traditional Storage Primitives,” Proceedings of the IEEE 17th International Symposium on High Performance Computer Architecture (HPCA-17), pages 301-311, which is incorporated herein by reference, Ouyang et al. describe a class of higher order storage primitives beyond simple block I/O that high performance solid state storage should support. One such primitive, atomic-write, batches multiple I/O operations into a single logical group that will be persisted as a whole or rolled back upon failure. By moving write-atomicity down the stack into the storage device, it is possible to reduce the amount of work required at the application, file system, or operating system layers to guarantee the consistency and integrity of data.
U.S. Pat. No. 7,873,782, whose disclosure is incorporated herein by reference, describes a file-system-aware storage system which locates and analyzes host file system data structures in order to determine storage usage of the host file system. To this end, the storage system might locate an operating system partition, parse the operating system partition to locate its data structures, and parse the operating system data structures to locate the host file system data structures. The storage system manages data storage based on the storage usage of the host file system. The storage system can use the storage usage information to identify storage areas that are no longer being used by the host file system and reclaim those areas for additional data storage capacity. Also, the storage system can identify the types of data stored by the host file system and manage data storage based on the data types, such as selecting a storage layout and/or an encoding scheme for the data based on the data type.